/*******************************************************************************
 *
 *      Filename: Scene.h
 *   Description: 
 *        Author: [kb]ypp
 *    Created at: November 30, 2005
 * Last modified: 
 *
 ******************************************************************************/

#ifndef SCENE_H
#define SCENE_H

//! @brief Base abstract class for all scene classes
//!
//! Its possible descendants may be into, level, cut-scene, etc.
class Scene {
public:
	//! @brief Default constructor
	Scene() {}
	
	//! @brief Init scene (load resources, prepare for rendering, etc.)
	void init() { doInit(); }
	//! @brief Update current scene state for given time delta
	void update( float deltaT ) { doUpdate( deltaT ); }
	//! @brief Scene, camera, motor! :) Render scene
	void render() { doRender(); }
	//! @brief Do scene clean up
	void cleanup() { doCleanup(); };
	
protected:
	//! @brief Destructor
	~Scene() {}
	
private:
	//! @brief Copy-construction disabled
	Scene( const Scene& );
	//! @brief Assignment disabled
	const Scene& operator=( const Scene& );
	
	virtual void doInit() = 0;
	virtual void doUpdate( float deltaT ) = 0;
	virtual void doRender() = 0;
	virtual void doCleanup() = 0;
};

#endif // SCENE_H
